#ifdef HERZELEID_DESKTOP
 #if _MSC_VER
  #pragma once
 #endif

 #ifndef __HERZELEID_POINTEREVENTARGS_INCLUDED__
  #define __HERZELEID_POINTEREVENTARGS_INCLUDED__
  #include "HerzeleidCoreDispatcherInc.hxx"
  #include "HerzeleidEventArgsBase.hxx"
  #include "HerzeleidPointerPoint.hxx"
  #include "HerzeleidVirtualKey.hxx"
  #include "HerzeleidPointerUpdateKind.hxx"

// Contains the arguments returned by the last pointer event.
// TODO: Retrieves the pointer data for up to the last 64 pointer locations since the last pointer event.
HerzeleidUICoreNamespaceBegin class PointerEventArgs : public EventArgsBase
{
	friend class CoreDispatcher;
protected:

	// Internal types

	typedef HerzeleidSystemNamespaceImpl::VirtualKeyModifiers Modifiers;	// VirtualKeyModifiers shortcut
	typedef HerzeleidUIInputNamespaceImpl::PointerPoint PointerPoint;		// PointerPoint shortcut
	typedef HerzeleidUIInputNamespaceImpl::PointerUpdateKind UpdateKind;		// PointerPoint shortcut
	TinyTypeDecl( PointerPoint );	// PointerPoint shortcut
	TinyTypeDecl( Modifiers );		// VirtualKeyModifiers shortcut

	// Members

	Modifiers m_eModifiers;			// The keyboard key or keys used to modify the pointer input, such as the "Ctrl" key when pressed in conjunction with another key, as in Ctrl+C.
	PointerPoint m_CurrentPoint;	// The pointer data of the last pointer event.

public:

	PointerEventArgs( ); 
	PointerEventArgs( _In_ WindowMessageConst WindowMessage ); 

	Void RetrievePointerData( _In_ WindowMessageConst WindowMessage );
	Void RetrieveMouseData( _In_ WindowMessageConst WindowMessage, _In_ UpdateKind Kind );

	DeclGetPropOnly( PointerPointConstPtrConst, CurrentPoint );	// Information about the state and screen position of the pointer.
	inline DeclConstTypedGetterFor( PointerPointConstPtrConst, CurrentPoint ) // Information about the state and screen position of the pointer.
	{
		return( &m_CurrentPoint );
	}	

	DeclGetPropOnly( ModifiersConst, KeyModifiers ); // The active key modifiers.
	inline DeclConstTypedGetterFor( ModifiersConst, KeyModifiers ) // The active key modifiers.
	{
		return( m_eModifiers );
	}

	// TODO: IVector = Herzeleid::Collections::IVector
	// Retrieves the pointer data for up to the last 64 pointer locations since the last pointer event.
	// TODO: GetIntermediatePoints( ) [IVector<PointerPoint>]

} HerzeleidUICoreNamespaceEnd; 

 #endif // !HERZELEID_POINTEREVENTARGS_INCLUDED__
#endif // !HERZELEID_DESKTOP
